// -----------------------------
// Author: 		Dhaenens Gert 
// Creation: 	2/27/2015 6:45:26 PM				
// -----------------------------

#ifndef _IBuffer_h
#define _IBuffer_h

#include "Common.h"

namespace Flow
{

	class IGraphicsDevice;

	class IBuffer
	{
	public:

		// Release the Buffer
		virtual void	Release() = 0;

		// Create the Buffer
		virtual Bool	Create(IGraphicsDevice* lpDevice, BufferType::Enum type, void* lpData, Size_T elementSize, Size_T elementCount) = 0;
		// Update the Buffer
		virtual void	Update(IGraphicsDevice* lpDevice, void* lpData, Size_T dataSize) = 0;

		// Does the Buffer have Data?
		virtual Bool	HasData() const = 0;
		// Get the size of 1 element
		virtual Size_T	GetElementSize() const = 0;
		// Get the amount of elements
		virtual Size_T	GetElementCount() const = 0;
		// Get the total size of the buffer
		virtual Size_T	GetTotalSize() const = 0;

	};

}

#endif